// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

suite("test_array_push_pop_backfront", "p0") {
    qt_old_sql "SELECT 'array_pushback-pushfrony'"
    order_qt_old_sql "SELECT array_pushback(Null, 1);"
    order_qt_old_sql "SELECT array_pushback([1], 1);"
    order_qt_old_sql "SELECT array_pushback([Null], 1);"
    order_qt_old_sql "SELECT array_pushback([0.5, 0.7], 1);"
    order_qt_old_sql "SELECT array_pushback([1], -1);"
    order_qt_old_sql "SELECT array_pushback(['a', 'b'], 'cd');"
    order_qt_old_sql "SELECT array_pushback([], 1);"
    order_qt_old_sql "SELECT array_pushback([], -1);"

    order_qt_old_sql "SELECT array_pushfront(Null, 1);"
    order_qt_old_sql "SELECT array_pushfront([1], 1);"
    order_qt_old_sql "SELECT array_pushfront([Null], 1);"
    order_qt_old_sql "SELECT array_pushfront([0.5, 0.7], 1);"
    order_qt_old_sql "SELECT array_pushfront([1], -1);"
    order_qt_old_sql "SELECT array_pushfront(['a', 'b'], 'cd');"
    order_qt_old_sql "SELECT array_pushfront([], 1);"
    order_qt_old_sql "SELECT array_pushfront([], -1);"

    qt_old_sql "SELECT 'array_popback-popfront'"
    order_qt_old_sql "SELECT array_popback(Null);"
    order_qt_old_sql "SELECT array_popback([]);"
    order_qt_old_sql "SELECT array_popback([1]);"
    order_qt_old_sql "SELECT array_popback([1, 2, 3]);"
    order_qt_old_sql "SELECT array_popback([0.1, 0.2, 0.3]);"
    order_qt_old_sql "SELECT array_popback(['a', 'b', 'c']);"

    order_qt_old_sql "SELECT array_popfront(Null);"
    order_qt_old_sql "SELECT array_popfront([]);"
    order_qt_old_sql "SELECT array_popfront([1]);"
    order_qt_old_sql "SELECT array_popfront([1, 2, 3]);"
    order_qt_old_sql "SELECT array_popfront([0.1, 0.2, 0.3]);"
    order_qt_old_sql "SELECT array_popfront(['a', 'b', 'c']);"


    // nereids
    sql "set enable_nereids_planner=true;"
    sql "set enable_fallback_to_original_planner=false;"


    qt_nereid_sql "SELECT 'array_pushback-pushfront'"
    order_qt_nereid_sql "SELECT array_pushback(Null, 1);"
    order_qt_nereid_sql "SELECT array_pushback([1], 1);"
    order_qt_nereid_sql "SELECT array_pushback([Null], 1);"
    order_qt_nereid_sql "SELECT array_pushback([0.5, 0.7], 1);"
    order_qt_nereid_sql "SELECT array_pushback([1], -1);"
    order_qt_nereid_sql "SELECT array_pushback(['a', 'b'], 'cd');"
    order_qt_nereid_sql "SELECT array_pushback([], 1);"
    order_qt_nereid_sql "SELECT array_pushback([], -1);"

    order_qt_nereid_sql "SELECT array_pushfront(Null, 1);"
    order_qt_nereid_sql "SELECT array_pushfront([1], 1);"
    order_qt_nereid_sql "SELECT array_pushfront([Null], 1);"
    order_qt_nereid_sql "SELECT array_pushfront([0.5, 0.7], 1);"
    order_qt_nereid_sql "SELECT array_pushfront([1], -1);"
    order_qt_nereid_sql "SELECT array_pushfront(['a', 'b'], 'cd');"
    order_qt_nereid_sql "SELECT array_pushfront([], 1);"
    order_qt_nereid_sql "SELECT array_pushfront([], -1);"

    qt_nereid_sql "SELECT 'array_popback-popfront'"
    order_qt_nereid_sql "SELECT array_popback(Null);"
    order_qt_nereid_sql "SELECT array_popback([]);"
    order_qt_nereid_sql "SELECT array_popback([1]);"
    order_qt_nereid_sql "SELECT array_popback([1, 2, 3]);"
    order_qt_nereid_sql "SELECT array_popback([0.1, 0.2, 0.3]);"
    order_qt_nereid_sql "SELECT array_popback(['a', 'b', 'c']);"

    order_qt_nereid_sql "SELECT array_popfront(Null);"
    order_qt_nereid_sql "SELECT array_popfront([]);"
    order_qt_nereid_sql "SELECT array_popfront([1]);"
    order_qt_nereid_sql "SELECT array_popfront([1, 2, 3]);"
    order_qt_nereid_sql "SELECT array_popfront([0.1, 0.2, 0.3]);"
    order_qt_nereid_sql "SELECT array_popfront(['a', 'b', 'c']);"

}
